serwis komputerowy, odzyskiwanie danych


TRIM w dyskach SMR i SSD



Poziomy adresacji w nośnikach danych



Z punktu widzenia użytkownika dane są przechowywane w plikach uporządkowanych w strukturze logicznej katalogów. Z kolei drzewa katalogów są umieszczane na partycjach – wydzielonych logicznie częściach dysków lub ich zespołów – macierzy RAID. Przechowywaniem plików w uporządkowanej strukturze zarządzają systemy plików, jakie w szczegółach istotnie różnią się między sobą.
Abstrahując od tych różnic, możemy we wszystkich systemach plików zauważyć pewne podobieństwa. Systemy plików umieszczają pliki w pewnych jednostkach alokacji nazywanych, w zależności od nomenklatury konkretnego systemu plików, klastrami (w systemach plików związanych z Microsoftem) lub blokami (typowo w środowiskach wywodzących się z Uniksa). Z uwagi na to, że pojęcie bloku jest bardzo wieloznaczne, dla uniknięcia nieporozumień dalej na oznaczenie tych jednostek alokacji będziemy używać pojęcia „klaster”.
Klastry zawierają mniejszą lub większą (ale zawsze równą potędze dwójki) liczbę sektorów LBA (ang. Logical Block Addressing). Adresacja LBA została wymyślona w pierwszej połowie lat '80 dla uproszczenia zarządzania dyskami twardymi, zastąpienia odwołującej się bezpośrednio do fizycznych sektorów adresacji CHS (cylinder, sector, head) i zapewnienia kompatybilności pomiędzy urządzeniami różnych producentów. Została ona przyjęta przez standardy ATA i SCSI, a także jest wykorzystywana i przez inne protokoły komunikacyjne używane do wymiany informacji z różnymi nośnikami danych.
W razie potrzeby odczytania lub zapisania danych na nośniku, klastrowa adresacja systemu plików jest przeliczana na adresację LBA i odpowiednie polecenia wskazują właściwe sektory właśnie w tej adresacji. Ale dyski twarde wciąż zbudowane są z mniejszej lub większej liczby talerzy, na jakich znajdują się okrągłe, koncentryczne ścieżki podzielone na fizyczne sektory. W związku z tym konieczne jest odpowiednie przyporządkowanie numerów adresów LBA do konkretnych sektorów fizycznych. Zadaniem tym zajmuje się część oprogramowania układowego – podsystem translacji adresów logicznych na fizyczne, skrótowo zwany translatorem.
Podobnie wygląda sytuacja w przypadku nośników półprzewodnikowych przechowujących dane w układach Flash-NAND. Do nich też się zwracamy za pośrednictwem adresacji LBA, choć nośniki tego typu nie mają talerzy, ścieżek ani sektorów. Układy Flash-NAND adresują dane w stronach (jest to minimalna jednostka programowania i odczytu) oraz blokach (minimalna jednostka kasowania). Sektory są emulowane przez kontroler wyłącznie na potrzeby komunikacji ze światem zewnętrznym. I również w przypadku nośników półprzewodnikowych oprogramowanie układowe zawiera część odpowiedzialną za translację adresów fizycznych na logiczne często określaną jako warstwa translacji Flash (ang. Flash Translation Layer - FTL).
Adresacja LBA jest też wykorzystywana przez macierze RAID. Kiedy zwracamy się do macierzy RAID, odwołujemy się do jej adresacji LBA, jaka następnie jest przeliczana przez kontroler macierzy na adresację LBA poszczególnych dysków wchodzących w jej skład. Jeśli mamy do czynienia ze złożonym środowiskiem, w jakim występują macierze na macierzach, adresacja LBA macierzy, do jakiej się zwracamy, jest najpierw przeliczana na adresację macierzy, jakie wchodzą w jej skład, a dopiero w dalszej kolejności - na adresację fizycznych dysków.
Adresację LBA wykorzystują także pliki maszyn wirtualnych. Każdy z takich plików ma zainstalowany swój własny system plików, niezależny od systemu plików opisującego plik maszyny wirtualnej. I wewnątrz takiego pliku mamy wirtualną adresację klastrową przeliczaną na wirtualną adresację LBA, jaka informuje nas, który fragment maszyny wirtualnej chcemy odczytać lub zapisać. I dopiero dysponując tą informacją, adresy te mogą być przeliczone na realne klastry systemu plików opisującego plik maszyny wirtualnej i realne adresy LBA fizycznego nośnika.



Wolne i zajęte miejsce



Kiedy kupujemy nowy dysk, uważamy, że jest on pusty. Dopiero, kiedy go zainicjalizujemy, utworzymy partycje, sformatujemy i zaczniemy umieszczać na nim jakieś dane, zaczniemy uważać, że powoli się zapełnia. Możemy też za pomocą narzędzi systemu operacyjnego sprawdzić, ile mamy wolnego, a ile zajętego miejsca. Ale o zajętym i wolnym miejscu możemy rozmawiać tylko w odniesieniu do struktur logicznych systemu plików.
W sensie fizycznym każdy nośnik danych zawsze przechowuje jakąś informację, choćby i nieinterpretowalną na poziomie logicznym. Odwołując się do dowolnego sektora LBA, zawsze dostaniemy jakąś odpowiedź, niezależnie od tego, czy chcemy przeczytać sektor wolny w rozumieniu struktur logicznych, czy zajęty. W przypadku dysków nowych będzie to ciąg bajtów o wartości 0x00, ale w przypadku używanych już nie jest to tak oczywiste.
Czasem może nam się wydawać, że wolne miejsce, to sektory wypełnione zerami, a zawierające inną zawartość, to sektory zajęte. W rzeczywistości jest inaczej. Zajęte miejsce, to obszary dysku zaalokowane w strukturach logicznych systemu plików, nawet, jeśli zawierają sektory wypełnione zerami. Jeśli te zera są opisane jako część pliku lub jakiejś struktury logicznej i są w jakiś sposób interpretowalne, to nie możemy ich uważać za wolny obszar. Z drugiej strony, nawet obszary zawierające spójne i kompletne pliki, jeśli nie są odpowiednio zaadresowane w strukturach logicznych systemu plików, z ich punktu widzenia będą wolnym miejscem, w jakim można umieścić inne dane. Takie niezaadresowane pliki nie są widoczne w strukturze katalogów, ale, dopóki nie zostaną nadpisane, są możliwe do odzyskania.



Podsystem translacji adresacji logicznej na fizyczną



Klasyczny translator w dyskach twardych



Przez dziesięciolecia translacja adresacji LBA na fizyczną w dyskach twardych była relatywnie prosta. Sektory fizyczne dostawały kolejne numery LBA poczynając od 0 do ostatniego numeru, wynikającego z nominalnej pojemności dysku. Adresy LBA były nadawane poczynając od ścieżek przy zewnętrznej krawędzi talerza dysku i ich numery zwiększały się przechodząc ku osi silnika. Jest to związane z tym, że ścieżki o większym promieniu są dłuższe, a więc można na nich umieścić więcej sektorów, niż na krótszych ścieżkach, o mniejszym promieniu.
Dzięki temu rozwiązaniu początkowe sektory LBA można czytać szybciej, gdyż za jednym obrotem talerza można ich przeczytać więcej. Łatwo to zaobserwować testując dysk, gdzie wykres prędkości odczytu opada przy coraz to wyższych numerach adresów LBA. W przypadku, gdy dysk wykorzystuje wiele powierzchni talerzy, od czasu do czasu przerywana jest ciągłość numeracji na danej powierzchni po to, by kolejne adresy umieszczać na innych powierzchniach. Przyporządkowanie konkretnych adresów LBA do określonych powierzchni talerzy nazywane jest mapą głowic, gdyż taka mapa informuje nas, która głowica czyta określone zakresy adresów LBA.
Jednym z zadań translatora jest omijanie uszkodzonych sektorów. Z punktu widzenia podsystemu translacji uszkodzone sektory możemy podzielić na fabryczne i powstałe w toku eksploatacji. Pierwsze z nich są zapisywane na podstawowej liście defektów (lista P) i omijane przy nadawaniu numerów adresów LBA. Drugie są ujawniane w toku eksploatacji dysku i zapisywane na przyrostowej liście defektów (lista G), a ponieważ już mają nadane numery adresów LBA, numery te są przypisywane sektorom rezerwowym w procesie remapowania (realokacji).
W różnych architekturach oprogramowania układowego i modelach dysków szczegóły podsystemu translacji są różne, ale tak szczegółowa wiedza nie będzie nam potrzebna dla zrozumienia działania funkcji TRIM. Tak naprawdę najistotniejszą zmianą, jaka zaszła pomiędzy wprowadzeniem adresacji LBA, a wynalezieniem zapisu dachówkowego (gontowego) było zastąpienie sektorów 512-bajtowych sektorami 4-kilobajowymi (Advanced Format). W przypadku tych ostatnich jednemu sektorowi fizycznemu odpowiada 8 sektorów LBA.



Dyski SMR i drugi poziom translacji



W dążeniu do zwiększania gęstości zapisu producenci dysków twardych zwrócili uwagę, że głowica odczytująca jest w stanie odczytywać sygnał ze znacznie węższej ścieżki, niż zapisuje głowica zapisująca. Dlatego opracowali metodę zapisu dachówkowego (ang. Shingled Magnetic Recording – SMR) polegającą na tym, że kolejne ścieżki częściowo nadpisują poprzednie. Wymagało to zmiany konstrukcji głowicy zapisującej tak, by indukowała pole magnetyczne asymetrycznie, by najsilniejszy sygnał był zapisywany jak najbliżej poprzedniej ścieżki, ale jej nie zakłócał.
Negatywną konsekwencją wprowadzenia zapisu dachówkowego była utrata swobodnego dostępu do sektora przy zapisie. Kiedy zapisujemy nową zawartość do sektora, indukowane przez głowicę pole magnetyczne uszkadza zawartość sektorów położonych na dalszych ścieżkach. Aby uniknąć konieczności przepisywania za każdym razem całych powierzchni talerza, producenci grupują ścieżki w strefy SMR o pojemności rzędu kilkudziesięciu MB i rozdzielają te strefy bezpiecznymi odstępami.
Tym niemniej wciąż dokonanie zmian w pojedynczym sektorze wymaga przepisania całej grupy ścieżek. Ponieważ bardzo negatywnie odbija się to na wydajności przy zapisie, producenci postanowili zapisywać nową zawartość sektorów nie tam, gdzie się one fizycznie znajdowały wcześniej, ale tam, gdzie jest to w danej sytuacji najwygodniejsze. Szczegóły rozwiązania tego problemu są różne dla różnych producentów, ale ich cechą wspólną jest zerwanie względnie stałego przywiązania adresu LBA do konkretnego adresu fizycznego. W dyskach SMR numery adresów LBA mogą z łatwością zmieniać swoją fizyczną lokalizację, a za śledzenie ich aktualnego położenia odpowiada drugi poziom translatora.
Takie dynamicznie zachodzące zmiany położenia adresów logicznych w adresach fizycznych wymagają wprowadzenia do oprogramowania układowego dysków specjalnych tablic pozwalających na rejestrowanie tych zmian. Praktycznie każdy zapis na dysku wiąże się z koniecznością zarejestrowania nowego fizycznego położenia jakichś adresów LBA. Skutkuje to zwiększonym ryzykiem wystąpienia błędów w modułach translatora drugiego poziomu, co jest częstą przyczyną awarii dysków SMR i utraty dostępu do danych.



Warstwa translacji Flash w nośnikach półprzewodnikowych



Cechą charakterystyczną nośników półprzewodnikowych jest brak możliwości bezpośredniego nadpisywania istniejącej zawartości. Wynika to z fizyki przechowywania w nich danych, jaka pozwala umieszczać elektrony tylko w pustych bramkach pływających tranzystorów, jakie muszą być skasowane przed ponownym zaprogramowaniem. Dlatego też jeśli zmieniamy zawartość sektora LBA, jest ona zapisywana w innym fizycznym miejscu, a przestarzała zawartość musi zostać skasowana, by zwolnić fizyczną jednostkę alokacji dla następnych zapisów.
Takie rozwiązanie wymaga, by w nośniku część fizycznych jednostek alokacji zawsze była gotowa do zapisu nowych danych. Dlatego adresacja LBA nie może pokrywać całej fizycznej pojemności nośnika. Relacja liczby dostępnych sektorów LBA w stosunku do fizycznego rozmiaru nośnika jest kompromisem pomiędzy dążeniem do sprzedawania urządzeń o jak najwyższej pojemności, a koniecznością zachowania rezerwy pozwalającej na ich wydajną i bezawaryjną pracę.
Występowanie w nośnikach półprzewodnikowych obok operacji zapisu, także operacji kasowania sprawia, że edycja zawartości sektorów LBA jest bardziej złożona, niż w pozwalających na bezpośrednie nadpisanie nośnikach magnetycznych. Zapisywanie nowej zawartości sektorów LBA w innym fizycznym miejscu wymusza odnotowanie ich nowej lokalizacji w tablicach translacji. Z kolei bloki zawierające nieaktualne dane wypadają z adresacji LBA i są przeznaczone do skasowania. Ten sposób zarządzania danymi sprawia, że adresy LBA nie są przywiązane do konkretnych fizycznych jednostek alokacji, ale rotują po nich w sposób determinowany wykonywanymi operacjami.
Dodatkową komplikacją w przypadku nośników półprzewodnikowych jest to, że posługują się one dwiema różnymi jednostkami alokacji: stronami jakie są minimalną jednostką odczytu i programowania oraz blokami – minimalną jednostką kasowania. Rozmiar stron typowo pozwala na przechowywanie w nich od jednego do 32 512-bajtowych sektorów LBA (ich liczba w stronie zawsze jest potęgą dwójki) oraz niezbędnej dla poprawnej pracy nośnika informacji nadmiarowej. Z kolei bloki zawierają od kilku do kilkuset stron, przy czym do pewnego momentu liczba stron w bloku była potęgą dwójki, ale już od dobrych kilku lat ta zasada nie jest przestrzegana.
Oznacza to, że w praktyce zmiany zachodzące w zawartości nośnika na poziomie sektorów LBA powodują, że fizyczne jednostki alokacji mogą jednocześnie zawierać zarówno sektory LBA z aktualną zawartością, jak i przestarzałe. Staje się to kłopotliwe, kiedy liczba wolnych bloków, gotowych na przyjęcie nowych danych zaczyna spadać. Kolejnym problemem, z jakim zmagają się nośniki półprzewodnikowe, jest ich zużycie operacjami kasowania i zapisu, jakie w konsekwencji prowadzą do awarii urządzenia. I to właśnie te problemy leżały u podłoża wdrożenia funkcji TRIM.



Jak działa TRIM w SSDkach?



Podstawą działania funkcji TRIM jest fakt, że, przynajmniej teoretycznie, z punktu widzenia użytkownika nie ma potrzeby fizycznego przechowywania tych danych, jakie nie są zaalokowane w strukturach logicznych systemu plików. Wystarczy, by podsystem translacji wiedział, które sektory leżą w obszarach zajętych przez pliki lub opisujące je struktury logiczne, a które w logicznym sensie są wolnym miejscem. I w przypadku tych ostatnich, zamiast fizycznie odczytywać żądane sektory, kontroler może w odpowiedzi od razu przesłać sektory wypełnione zerami.
W działaniu funkcji TRIM można dostrzec pewną analogię do plików rzadkich (rozrzedzonych – ang. sparse), w jakich wypełnione zerami większe fragmenty pliku nie muszą być fizycznie zapisywane na partycji. W niektórych systemach plików wystarczy, by metadane zawierały informację o tym, ile klastrów wypełnionych zerami i w które dokładnie miejsce pliku należy je wstawić przy jego odczycie. I jeśli oprogramowanie układowe dysku SSD pozwala w warstwie translacji Flash zawrzeć podobną informację, translator nie będzie odszukiwał fizycznej lokalizacji poszukiwanych sektorów, a poinformuje kontroler, że są to sektory „puste”.
Wprowadzenie funkcji TRIM w dyskach SSD zwiększyło ich wydajność. Brak konieczności fizycznego odczytywania sektorów leżących w „wolnym obszarze” dysku sprawia, że możemy szybciej otrzymać odpowiedź. Możemy też utrzymywać więcej skasowanych bloków, co nie tylko pozytywnie wpływa na wydajność przy zapisie, ale też zmniejsza obciążenie nośnika operacjami programowania i kasowania oraz ułatwia działanie algorytmów wyrównywania zużycia. Jest to istotne ze względu na żywotność nośników półprzewodnikowych, jaka w największym stopniu zależy właśnie od operacji zapisu i kasowania.
Ponieważ nośniki danych same z siebie tych danych nie interpretują, a jedynie je przechowują, do działania funkcji TRIM, prócz jej obsługi przez oprogramowanie układowe dysku, konieczne jest także źródło informacji o tym, co się dzieje na poziomie struktur logicznych systemów plików. Dysk musi skądś wiedzieć, które sektory są „zajęte”, a które nie. Informację na ten temat przekazuje kontrolerowi system operacyjny zarządzający systemami plików na znajdujących się na dysku partycjach.
Obecnie większość używanych systemów operacyjnych obsługuje funkcję TRIM i obsługa tej funkcji domyślnie jest włączona. Jednak nie w każdym przypadku system operacyjny obsługuje funkcję TRIM dla wszystkich obsługiwanych systemów plików. Możliwe są także sytuacje, kiedy system operacyjny nie chce współpracować z niektórymi dyskami, choć zarówno system, jak i nośnik obsługują funkcję TRIM. Przykładem mogą być starsze wersje MacOSu, jakie wymagały zewnętrznego oprogramowania dla obsługi SSDków pochodzących od innych dostawców, niż Apple.
Dla zadziałania funkcji TRIM konieczna jest także jej obsługa przez protokół komunikacyjny wykorzystywany do komunikacji z nośnikiem. Dlatego TRIM nie zadziała w przypadku starszego sprzętu, niezgodnego z 8 wersją standardu ATA. Mogą też występować problemy z obsługą funkcji TRIM przez kontrolery macierzy RAID. Funkcja ta nie jest też obsługiwana przez większość przejściówek USB. Odpowiednikiem funkcji TRIM w standardzie SCSI jest UNMAP.



Rozpraszanie danych w układach Flash-NAND



Dane w nośnikach półprzewodnikowych nie są zapisywane sekwencyjnie, ale są rozpraszane po różnych fizycznych jednostkach alokacji. Wpływ na to ma wiele czynników związanych z wydajnością i trwałością nośników. Pamięci Flash-NAND są dosyć wolne, dlatego wydajność wykorzystujących te scalaki nośników buduje się równoległym przetwarzaniem danych w wielu układach, podobnie, jak w przypadku macierzy RAID równolegle przetwarzających dane na wielu dyskach.
Drugą ważną przyczyną rozpraszania danych jest kwestia wydzielanego podczas zapisu i kasowania danych ciepła Joule'a. Operacje programowania i kasowania w układach Flash-NAND wykorzystują kwantwomechaniczne zjawisko tunelowania Fowlera-Nordheima, jakie wymaga podnoszenia napięcia wewnątrz układu i wiąże się ze stratami energii. Gdyby fizyczny zapis w układach Flash-NAND był dokonywany sekwencyjnie, mogłoby dochodzić do częstych uszkodzeń pamięci wskutek lokalnego przegrzania układu. Dlatego pamięci te są często wewnątrz logicznie dzielone na dwie lub cztery części, między jakimi dane są zapisywane w przeplocie.
Z powyższych powodów, dane zapisywane w nośnikach półprzewodnikowych są rozpraszane w taki sposób, że sąsiednie sektory LBA najczęściej fizycznie trafiają do różnych stron. Łatwo to zauważyć na nośnikach, w jakich wystąpią błędy odczytu. W czasie skanowania takiego nośnika często można zaobserwować sekwencje uszkodzonych sektorów występujących w przeplocie ze sprawnymi. Takie uszkodzone sektory są odczytywane z uszkodzonej strony, a występujące pomiędzy nimi poprawnie czytane sektory znajdują się w stronie sprawnej.



Zbieranie śmieci



Podczas wykonywania zmian zachodzących na poziomie adresacji LBA, zawartość zmienianych sektorów zapisywana jest do innych fizycznych stron, znajdujących się w innych fizycznych blokach. Ponieważ bloki zawierają wiele, współcześnie zazwyczaj setki stron, łatwo może dojść do takich sytuacji, kiedy bloki będą zawierały część stron z aktualną zawartością i część stron zdezaktualizowanych. Dopóki blok zawiera aktualne strony, nie może być skasowany i przygotowany na przyjęcie nowych danych.
Taka sytuacja jest bardzo niewygodna z punktu widzenia zarządzania adresacją nośnika, gdyż może się okazać, że zbyt wiele bloków zawiera niewielką ilość stron z aktualną zawartością i z tego powodu nie może być skasowana. Może to spowodować znaczny spadek dostępnych skasowanych bloków i utrudnić zapisanie nowych danych, choć z logicznego punktu widzenia nośnik wciąż będzie zawierał wystarczająco wolnego miejsca. Aby rozwiązać ten problem stosuje się procedurę zbierania śmieci (ang. Garbage Collection).
Inspirowane procedurami odśmiecania pamięci operacyjnej zbieranie śmieci w nośnikach półprzewodnikowych polega na przenoszeniu stron zawierających aktualną zawartość z bloków, jakie takich aktualnych stron zawierają relatywnie niewiele do innych bloków. Umożliwia to skasowanie bloków, jakie przestają zawierać aktualne dane. Proces ten zazwyczaj odbywa się w tle, kiedy kontroler nośnika nie jest zajęty obsługą otrzymywanych poleceń. Funkcja TRIM pozwala pomijać przy zbieraniu śmieci te strony, jakie zawierają dane wprawdzie aktualne, ale skasowane na poziomie logicznym. Dzięki temu można nie tylko przyśpieszyć działanie nośnika, ale też zmniejszyć jego obciążenie operacjami zapisu i kasowania.



Dlaczego TRIM trafił do dysków SMR?



W przypadku dysków SMR zastosowanie funkcji TRIM jest konsekwencją utraty swobodnego dostępu do sektora przy zapisie. Zmusiło to producentów do szukania rozwiązań pozwalających uratować wydajność dysków SMR przy zapisie, co skutkowało skomplikowaniem podsystemu translacji adresacji logicznej na fizyczną. Różni producenci dysków stosują różne podejścia do problemu zapisu danych w dyskach SMR.
Jednym ze stosowanych rozwiązań jest wykorzystanie bufora ścieżek o konwencjonalnym zapisie – Media Cache. Dane przychodzące do dysku zapisywane są w buforze, a dopiero później, kiedy dysk nie jest obciążony wykonywaniem poleceń użytkownika, są przenoszone do właściwych stref SMR. Dzięki temu w większości przypadków długotrwały proces przepisywania całych stref SMR i porządkowania bufora Media Cache może odbywać się w tle, w sposób niezauważalny dla użytkownika. Problematyczne jednak jest zapisywanie bardzo dużych porcji danych naraz, zwłaszcza, jeśli te dane obejmują dużą liczbę małych plików. W takich sytuacjach może dojść do zapełnienia bufora Media Cache i drastycznego załamania prędkości zapisu.
Inne podejście polega na zapisywaniu danych od razu w strefach SMR, przy czym często są to inne strefy, niż te, w jakich dane sektory LBA znajdowały się przed zapisem. Jest tu pewne podobieństwo do rotacji adresacji LBA po fizycznych jednostkach alokacji, jaka występuje w nośnikach półprzewodnikowych. Wprawdzie w przypadku nośników magnetycznych, jakimi są dyski twarde, nie potrzebujemy operacji kasowania, bo mamy możliwość bezpośredniego nadpisania istniejących danych, jednak przepisując strefę SMR nie chcielibyśmy uszkadzać zawartości tych sektorów, jakie się nie zmieniają.
Dlatego w przypadku obu wskazanych wyżej rozwiązań, zastosowanie funkcji TRIM korzystnie wpływa na wydajność dysków. Zarówno przy zapisie, gdy dysk wie, jakie obszary nie są zaalokowane w strukturach logicznych systemów plików i dzięki temu może oszczędzić czas niezbędny dla ich zapisania w docelowej lokalizacji, jak i przy odczycie, gdzie nie musi fizycznie odszukiwać sektorów zawierających „puste miejsce”, a zamiast tego może wystawić na zewnętrzny interfejs sektory wypełnione zerami. Ponieważ, w odróżnieniu od nośników półprzewodnikowych, operacje zapisu nie zużywają dysków twardych, TRIM w ich przypadku nie ma wpływu na ich żywotność, jak to ma miejsce w przypadku SSDków.



Praktyczne konsekwencje działania funkcji TRIM



Odzyskiwanie danych i informatyka śledcza



W przypadku nośników wykorzystujących funkcję TRIM fakt usunięcia danych na poziomie logicznym powoduje, że pracując na poziomie adresacji LBA nie będziemy mieli możliwości odzyskania skasowanych plików. Wynika to z faktu, że w odpowiedzi na żądanie odczytania sektorów zawierających te pliki, dysk zwróci nam sektory wypełnione zerami. Jednak na poziomie fizycznym te dane wciąż mogą istnieć. Przy czym sytuacja różnie wygląda w przypadku dysków twardych i SSD.
Ponieważ nośniki półprzewodnikowe muszą fizycznie kasować dane, proces fizycznego niszczenia zawartości usuniętej na poziomie logicznym rozpoczyna się w zasadzie niezwłocznie po jej usunięciu. Co istotne – jest to proces odbywający się na poziomie oprogramowania układowego, a więc, jeśli tylko nośnik jest podłączony do zasilania, odbywa się niezależnie od innych poleceń otrzymywanych od komputera i nie można go zatrzymać przy pomocy powszechnie używanych w informatyce śledczej blokerów zapisu. Proces kasowania bloków można zatrzymać wylutowując układy pamięci i odczytując je na programatorze lub wprowadzając SSDka w tryb serwisowy (ang. safe mode).
W przypadku wylutowania układów Flash-NAND odzyskanie danych może napotkać szereg przeszkód praktycznych, wśród jakich najpoważniejszą jest szyfrowanie. Obecnie szyfrowanie jest powszechnie stosowane w SSDkach nie tylko dlatego, że marketingowo dobrze się sprzedaje jako element bezpieczeństwa danych, ale też dlatego, że algorytmy szyfrujące dobrze randomizują dane, co sprzyja ograniczeniu występowania bitowych błędów odczytu. Tam, gdzie szyfrowanie nie jest stosowane, często wykorzystuje się dynamiczną randomizację, jaka jest matematycznie trudna do zdekodowania. Kolejną poważną przeszkodą, jaką można napotkać przy dekodowaniu binarnych obrazów układów pamięci, jest wewnętrzna kompresja, jakiej celem jest ograniczenie objętości fizycznie zapisywanych danych, a tym samym liczby zużywających układy operacji zapisu.
Z tego względu w daleko nie każdym przypadku rozlutowanie nośnika jest rozwiązaniem rokującym na skuteczne odzyskanie danych. Alternatywą jest wprowadzenie SSDka w tryb serwisowy, w jakim kontroler nie ma bezpośredniego dostępu do pamięci. Jeśli w trybie serwisowym można uzyskać dostęp do adresacji fizycznej przy jednoczesnym zablokowaniu procesów w tle, możliwe jest odzyskanie tej części danych, jaka nie została jeszcze fizycznie skasowana. Ale ponieważ proces fizycznego kasowania danych wskazanych przez TRIM jako usunięte na poziomie logicznym może się odbyć w ciągu kilku – kilkunastu minut, szanse na odzyskanie czegokolwiek tymi drogami są dość iluzoryczne.
Nieco lepiej wygląda sytuacja w przypadku dysków twardych, jakie nie obsługują operacji kasowania danych. W dyskach twardych dane skasowane logicznie w adresacji fizycznej pozostają nienaruszone do momentu, kiedy zostaną nadpisane inną zawartością. W ich przypadku czas reakcji i sam fakt podłączenia zasilania w przypadku obsługi funkcji TRIM nie mają aż tak krytycznego znaczenia dla odzyskania danych. Tym niemniej trzeba pamiętać, że dyski SMR też nie są wolne od procesów w tle, np. porządkowanie Media Cache, a nadpisywane nie są pojedyncze sektory, a całe strefy SMR.



Niszczenie danych



W przypadku niszczenia danych działanie funkcji TRIM utrudnia weryfikację poprawności wykonania zadania. Sprawia ona, że na poziomie logicznym możemy dostać odpowiedź sugerującą skutecznie zniszczenie danych, podczas gdy na poziomie adresacji fizycznej one wciąż jeszcze istnieją i są możliwe do odzyskania. Dopiero później zachodzące w tle operacje kasowania bloków prowadzą do faktycznego zniszczenia danych.
Ponadto zarówno w przypadku nośników półprzewodnikowych, jak i dysków SMR pojawia się ryzyko pozostawienia nieusuniętych danych w obszarach poza adresacją LBA. Ryzyko to jest większe w przypadku dysków twardych, ponieważ w przypadku nośników półprzewodnikowych bloki, jakie znajdą się poza adresacją LBA powinny zostać fizycznie skasowane. Dlatego dość powszechnie zaleca się dla zniszczenia danych wykorzystywać procedurę Secure Erase, jaka ma możliwość pracy bliżej fizycznej adresacji nośnika, co powinno zabezpieczyć skuteczne zniszczenie danych. Tym niemniej czasami są podnoszone wątpliwości co do prawidłowości implementacji procedury Secure Erase w oprogramowaniu układowym nośników.
Ciekawy przykład nieprawidłowej implementacji procedury Secure Erase w pamięciach eMMC zademonstrowała podczas konferencji Flash Data Recovery & Digital Forensic Summit 2024 Aya Fukami. W prezentacji „Exploiting the eMMC security features using the VNR” pokazała układy eMMC, z jakich można było odzyskać niemal 100 % ich zawartości, pomimo faktu przeprowadzenia operacji Secure Erase i pomimo tego, że na poziomie adresacji LBA zwracane były sektory o zawartości wypełnionej zerami. Jednak zejście do poziomu adresacji fizycznej pozwalało stwierdzić, że zawartość fizycznych jednostek adresacji była uszkodzona jedynie w niewielkim stopniu i znacznej części była możliwa do odzyskania.
Z tego względu podczas niszczenia danych warto zwracać uwagę na czas wykonania operacji Secure Erase. Jeśli jest ona wykonywana podejrzanie szybko, w czasie krótszym, niż czas niezbędny dla zapisania nośnika w całości, z prawdopodobieństwem graniczącym z pewnością dane nie zostały fizycznie zniszczone, a jedynie zostały przeprowadzone odpowiednie operacje na podsystemie translacji adresacji logicznej na fizyczną, W przypadku nośników szyfrowanych dodatkowo mógł być zniszczony klucz szyfrujący (tzw. cryptoerase), co istotnie podnosi bezpieczeństwo operacji. Tym niemniej, w takich sytuacjach lepiej do implementacji operacji Secure Erase odnosić się z ograniczonym zaufaniem i zniszczyć dane przez nadpisanie całego nośnika.